home *** CD-ROM | disk | FTP | other *** search
- property pkMaxDigits, poOwner, poAnswerBtns, poDotMan, piNumAnswers, psBaseMemberName, psButtonType, pzEvalType, piBaseOffset, piQuestionOffset, pliAnswerOffset, piFromChapterOffset, piFirstAnswerSprite, piQuestionSprite, piFromChapterSprite, piResponseSprites, piCorrectAnswer, plAnswerOrder
-
- on new me, xoDotMan, xoOwner, xiNumAnswers, xsButtonType, xkMaxDigits
- poDotMan = xoDotMan
- poOwner = xoOwner
- piNumAnswers = xiNumAnswers
- pzEvalType = xsButtonType
- case xsButtonType of
- #quiz:
- psButtonType = "Toggle"
- #test:
- psButtonType = "Radio"
- otherwise:
- psButtonType = xsButtonType
- end case
- piBaseOffset = 10
- pkMaxDigits = xkMaxDigits
- return me
- end
-
- on mInitQuestionTemplate me, xsBaseMemberName
- mInitLetters(me, xsBaseMemberName)
- mInitTextFields(me)
- end
-
- on mInitLetters me, xsBaseMemberName
- vlbuttons = []
- viSprite = mGiveDots(poDotMan, piNumAnswers)
- psBaseMemberName = xsBaseMemberName
- repeat with i = 1 to piNumAnswers
- vsMemberName = xsBaseMemberName & IntegerToString(i, pkMaxDigits)
- vlAbuttonInfo = [#sprite: viSprite + i - 1, #name: vsMemberName, #ID: i]
- add(vlbuttons, vlAbuttonInfo)
- end repeat
- poAnswerBtns = new(script(psButtonType & "GroupParent"), vlbuttons, #none)
- mSetOwner(poAnswerBtns, me)
- mDisable(poAnswerBtns, 0)
- piResponseSprites = mGiveDots(poDotMan, piNumAnswers)
- vsMember = psBaseMemberName & IntegerToString(1, pkMaxDigits) & ".up"
- vpOffset = (point(member(vsMember).width, 0) / 2) + (point(member("right").width, 0) / 2) + point(piBaseOffset, 0)
- repeat with i = 1 to piNumAnswers
- viSprite = piResponseSprites + i - 1
- vsMember = psBaseMemberName & IntegerToString(i, pkMaxDigits) & ".up"
- AlignCenteredSpriteToMember(viSprite, vsMember)
- set the loc of sprite viSprite to the loc of sprite viSprite - vpOffset
- end repeat
- end
-
- on mInitTextFields me
- piQuestionSprite = mGiveDot(poDotMan)
- vsLocatorMember = psBaseMemberName & IntegerToString(1, pkMaxDigits) & ".up"
- AlignTextBoxToSpacer(piQuestionSprite, vsLocatorMember)
- piQuestionOffset = member("questionText").height
- vpOffset = point(0, -piBaseOffset - piQuestionOffset)
- set the loc of sprite piQuestionSprite to the loc of sprite piQuestionSprite + vpOffset
- set the member of sprite piQuestionSprite to "questionText"
- set the ink of sprite piQuestionSprite to 36
- piFirstAnswerSprite = mGiveDots(poDotMan, piNumAnswers)
- pliAnswerOffset = []
- vsLocatorMember = psBaseMemberName & IntegerToString(1, pkMaxDigits) & ".up"
- vpOffset = point(member(vsLocatorMember).width + piBaseOffset, member(vsLocatorMember).height / 2)
- repeat with i = 1 to piNumAnswers
- viNextSprite = piFirstAnswerSprite + i - 1
- vsNum = IntegerToString(i, pkMaxDigits)
- vsLocatorMember = psBaseMemberName & IntegerToString(i, pkMaxDigits) & ".up"
- AlignTextBoxToSpacer(viNextSprite, vsLocatorMember)
- viOffset = member("answerText" & vsNum).height / 2
- add(pliAnswerOffset, viOffset)
- set the loc of sprite viNextSprite to the loc of sprite viNextSprite + vpOffset - point(0, viOffset)
- set the member of sprite viNextSprite to "answerText" & IntegerToString(i, pkMaxDigits)
- set the ink of sprite viNextSprite to 36
- end repeat
- piFromChapterSprite = mGiveDot(poDotMan)
- vsLocatorMember = psBaseMemberName & IntegerToString(piNumAnswers, pkMaxDigits) & ".up"
- AlignTextBoxToSpacer(piFromChapterSprite, vsLocatorMember)
- vihAnswerText = member("answerText" & IntegerToString(piNumAnswers, pkMaxDigits)).height
- vihBtn = member(vsLocatorMember).height
- if vihAnswerText > vihBtn then
- vpOffset = point(0, (vihBtn / 2) + (vihAnswerText / 2) + piBaseOffset)
- piFromChapterOffset = (vihBtn / 2) + (vihAnswerText / 2)
- else
- vpOffset = point(0, vihBtn + piBaseOffset)
- piFromChapterOffset = vihBtn
- end if
- end
-
- on mInitSprites me
- mResetDots(poDotMan)
- end
-
- on mHandleToggleBtnClick me, xiID
- viNdx = mGetNdxOfID(poAnswerBtns, xiID)
- mDisableABtn(poAnswerBtns, viNdx, 1)
- if xiID = piCorrectAnswer then
- vsMember = "right"
- puppetSound("legalDrag.snd")
- else
- vsMember = "wrong"
- puppetSound("illegalDrag.snd")
- end if
- vzEvent = symbol(string(pzEvalType) & vsMember)
- set the member of sprite (piResponseSprites + viNdx - 1) to vsMember
- mNotify(poOwner, vzEvent, xiID)
- end
-
- on mHandleRadioBtnClick me, xiID
- if xiID = piCorrectAnswer then
- vsMember = "right"
- else
- vsMember = "wrong"
- end if
- vzEvent = symbol(string(pzEvalType) & vsMember)
- mNotify(poOwner, vzEvent, xiID)
- end
-
- on mHandleQuestionReview me, xiQuestion
- mReviewAQuestion(me, xiQuestion)
- end
-
- on mResetQuestion me
- member("questionText").text = EMPTY
- repeat with i = 1 to piNumAnswers
- member("answerText" & IntegerToString(i, pkMaxDigits)).text = EMPTY
- set the member of sprite (piResponseSprites + i - 1) to "blackdot"
- end repeat
- mUndepressChosenBtn(poAnswerBtns)
- mDisable(poAnswerBtns, 0)
- end
-
- on mSetQuestionData me, xsData, xlAnswerOrder
- mResetQuestion(me)
- vsOld = the itemDelimiter
- the itemDelimiter = TAB
- member("questionText").text = item 1 of xsData
- set the loc of sprite piQuestionSprite to the loc of sprite piQuestionSprite + point(0, piQuestionOffset - member("questionText").height)
- piQuestionOffset = member("questionText").height
- delete item 1 of xsData
- if item 1 of xsData <> EMPTY then
- piCorrectAnswer = value(item 1 of xsData)
- delete item 1 of xsData
- xlAnswerOrder = GetListFrom1toX(piNumAnswers)
- mResetBtnIDs(poAnswerBtns, xlAnswerOrder)
- else
- piCorrectAnswer = 1
- mResetBtnIDs(poAnswerBtns, xlAnswerOrder)
- end if
- viNumAnswers = the number of items in xsData
- if viNumAnswers < piNumAnswers then
- repeat with i = viNumAnswers to piNumAnswers
- mHideABtn(poAnswerBtns, i)
- end repeat
- else
- if viNumAnswers > piNumAnswers then
- viNumAnswers = piNumAnswers
- else
- repeat with i = piNumAnswers to viNumAnswers
- mShowABtn(poAnswerBtns, i)
- end repeat
- end if
- end if
- piNumAnswers = viNumAnswers
- repeat with i = 1 to piNumAnswers
- vsNum = IntegerToString(i, pkMaxDigits)
- viSprite = piFirstAnswerSprite + i - 1
- member("answerText" & vsNum).text = item getAt(xlAnswerOrder, i) of xsData
- viOffset = member("answerText" & vsNum).height / 2
- set the loc of sprite viSprite to the loc of sprite viSprite + point(0, getAt(pliAnswerOffset, i) - viOffset)
- setAt(pliAnswerOffset, i, viOffset)
- end repeat
- the itemDelimiter = vsOld
- end
-
- on mSetFromChapter me, xiChapter
- end
-
- on mShowAnswer me
- set the member of sprite (piResponseSprites + mGetNdxOfID(poAnswerBtns, piCorrectAnswer) - 1) to "right"
- end
-
- on mSelectAnswer me, viWhich
- if viWhich then
- viNdx = mGetNdxOfID(poAnswerBtns, viWhich)
- mDepressABtn(poAnswerBtns, viNdx)
- mDisableABtn(poAnswerBtns, viNdx, 1)
- end if
- end
-
- on mMarkAnswer me, xiID
- if xiID = piCorrectAnswer then
- vsMember = "right"
- else
- if xiID <> 0 then
- vsMember = "wrong"
- end if
- end if
- set the member of sprite (piResponseSprites + mGetNdxOfID(poAnswerBtns, xiID) - 1) to vsMember
- end
-
- on mDisable me, xbDisable
- mDisable(poAnswerBtns)
- end
-
- on mNotify me, xiEvent, xOpcode
- case xiEvent of
- #ToggleBtnClick:
- mHandleToggleBtnClick(me, xOpcode)
- #RadioBtnClick:
- mHandleRadioBtnClick(me, xOpcode)
- end case
- end
-
- on mCleanUp me
- mCleanUp(poAnswerBtns)
- member("questionText").text = EMPTY
- repeat with i = 1 to piNumAnswers
- member("answerText" & IntegerToString(i, pkMaxDigits)).text = EMPTY
- end repeat
- member("fromChapterText").text = EMPTY
- end
-